﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;

namespace LimitsUtil
{
    class Program
    {
        static void Main(string[] args)
        {
            if (!HandledArgs(args))
            {
                Console.ReadKey();
                return;
            }

            string[] _000_imits = Get_000_Limits(StartParams.Source);

            if (_000_imits.Length != 0)
            {
                Unload_000_(StartParams.Destination, _000_imits);
            }


            if (StartParams.HandClose)
                Console.ReadKey();
        }

        private static void Unload_000_(string destination, string[] limits)
        {
            try
            {
                string destFile = null;

               /* if (destination.Contains("*"))
                {
                    var files = Directory.GetFiles(@"c:\work\TradePortal_2\TradePortal\LimitsUtil\bin\Release\", destination);

                    if (files.Length == 0)
                    {
                        Console.WriteLine("Нет найден файл для выгрузки");
                        return;
                    }

                    destFile = files[0];
                }
                */
                if (!string.IsNullOrWhiteSpace(destFile) || (destFile = File.Exists(destination) ? destination : null) != null)
                {
                    File.Delete(destination);
                    File.AppendAllLines(destFile, limits);
                    Console.WriteLine("Выгружено в " + destFile);
                    return;
                }

                
                File.WriteAllLines(destination, limits);
                Console.WriteLine("Выгружено в " + destination);
                
            }
            catch (Exception ex)
            {
                Console.WriteLine("Ошибка при выгрузке лимитов: " + ex.Message);
            }
        }

        private static string[] Get_000_Limits(string source)
        {
            string[] res = null;

            if (File.Exists(source))
            {
                var _000_ = new List<string>();
                foreach (var str in File.ReadLines(source))
                {
                    if (str.Contains("_000_"))
                    {
                        _000_.Add(str);
                        Console.WriteLine(str);
                    }
                }

                if (_000_.Count > 0)
                    res = _000_.ToArray();
            }

            return res ?? new string[] { };
        }

        /// <summary>
        /// РАзбор командной строки
        /// LimitUtils [-help] [-d:<fileTmpl>] [-s:fileName] [-hc]
        /// -help справка
        /// 
        /// -d: куда копировать _000_ лимиты
        ///     fileTmpl шаблон файла; лимиты будут добавлены в первый найденный по шаблону файл
        ///     Если -d не задан, то будет создан _000_yyyymmdd.lim
        /// 
        /// -s: откуда брать лимиты _000_; fileName задает имя файла; если параметр отсутствует, то будет взят limits.lim из директории с утилитой
        /// 
        /// -hc закрытие программы пользователем по окончании работы, если неуказан, то автоматом
        /// </summary>
        /// <param name="args"></param>
        /// <returns></returns>
        private static bool HandledArgs(string[] args)
        {
            if (args == null || args.Length == 0)
                return true;

            foreach (var arg in args.Select(s => s.ToLower()))
            {
                if (arg == "-help")
                {
                    Console.WriteLine("LimitUtils [-help] [-d:<fileTmpl>] [-s:fileName]\r\n" +
                                      "-help справка\r\n" +
                                      "-d: куда копировать _000_ лимиты\r\n" +
                                      "     fileTmpl шаблон файла; лимиты будут добавлены в первый найденный по шаблону файл\r\n" +
                                      "     Если -d не задан, то будет создан _000_yyyymmdd.lim\r\n" +
                                      "-s: откуда брать лимиты _000_; fileName задает имя файла; " +
                                      "     Если -s отсутствует, то будет взят limits.lim из директории с утилитой");
                    return false;
                }

                if (arg.Contains("-d"))
                {
                    try
                    {
                        StartParams.Destination = arg.Split(':')[1];
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Неверно задан парамерт -d: " + arg +
                                          "\r\nВыгрузка будет произведена в _000_" + DateTime.Today.ToString("yyyyMMdd") +
                                          ".lim");

                        StartParams.Destination = "_000_" + DateTime.Today.ToString("yyyyMMdd") + ".lim";
                    }

                    continue;
                }

                if (arg.Contains("-s"))
                {
                    try
                    {
                        StartParams.Source = arg.Split(':')[1];
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Неверно задан парамерт -s: " + arg +
                                          "\r\nЗагрузка будет произведена из limits.lim");

                        StartParams.Destination = "limits.lim";
                    }

                    continue;
                }

                if (arg == "-hc")
                {
                    StartParams.HandClose = true;
                }

            }

            return true;
        }
    }

    internal static class StartParams
    {
        public static string Destination = "_000_.lim";
        public static string Source = "limits.lim";
        public static bool HandClose;
    }
}

